{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 197,
   "id": "9fac9457-d385-4597-abde-50bf86c4404c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Reading in LAMOST data...\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "print(\"Reading in LAMOST data...\")\n",
    "X = np.load('fluxs.npy')\n",
    "y = np.load('sclss.npy')\n",
    "import pandas as pd\n",
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.metrics import classification_report\n",
    "from sklearn.model_selection import GridSearchCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "id": "7310957f-dff3-43be-955c-b464d7964623",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.64488655, 0.64488655, 0.64488655, ..., 0.16166192, 0.16082986,\n",
       "        0.16082986],\n",
       "       [0.52360463, 0.52360463, 0.52360463, ..., 0.07325829, 0.07325829,\n",
       "        0.07325829],\n",
       "       [0.5422894 , 0.526775  , 0.5422894 , ..., 0.05806394, 0.05806394,\n",
       "        0.05806394],\n",
       "       ...,\n",
       "       [0.00095674, 0.00095674, 0.00095674, ..., 0.00380735, 0.00411819,\n",
       "        0.00411819],\n",
       "       [0.4260177 , 0.4260177 , 0.4025868 , ..., 0.17916383, 0.17916383,\n",
       "        0.17916383],\n",
       "       [0.47431758, 0.47431758, 0.47431758, ..., 0.080699  , 0.06419416,\n",
       "        0.06419416]], dtype=float32)"
      ]
     },
     "execution_count": 198,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "id": "03e4e195-e1d7-46dd-a5ca-710857934ab2",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f77f41804f0>]"
      ]
     },
     "execution_count": 199,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = X[0,:]\n",
    "\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "plt.plot(x,\".\")\n",
    "x1 = X[1,:]\n",
    "\n",
    "plt.plot(x1,\".\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "id": "6b42bbb0-3aac-4aaf-b66e-c4da0d55f659",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_A = X[y == 'A']\n",
    "X_B = X[y == 'B']\n",
    "trainData_X = np.concatenate((X_A, X_B),axis=0)\n",
    "scaler = MinMaxScaler()\n",
    "trainData_X = scaler.fit_transform(trainData_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "id": "9e37cea8-a092-4399-923e-634680ec8b6e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1\n",
      " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n",
      " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n",
      " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]\n"
     ]
    }
   ],
   "source": [
    "trainData_y = np.array([0] * 100 + [1] * 100)\n",
    "\n",
    "print(trainData_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "id": "22fbe216-ae23-42e1-96b4-0ab7359456dc",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import classification_report\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.metrics import roc_curve\n",
    "from sklearn.metrics import auc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "id": "97b99419-1206-4177-898b-4f6991422901",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(trainData_X, trainData_y, test_size=0.25, random_state=123456)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 204,
   "id": "9d170508-e149-4053-b19b-a1c4c53b55c7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-19 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-19 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-19 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-19 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-19 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-19 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-19 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-19 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-19 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-19 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-19 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-19 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-19 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-19 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-19 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-19 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-19 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-19 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-19 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-19 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-19 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-19 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-19 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-19 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-19 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-19 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-19\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression(solver=&#x27;liblinear&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-19\" type=\"checkbox\" checked><label for=\"sk-estimator-id-19\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression(solver=&#x27;liblinear&#x27;)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LogisticRegression(solver='liblinear')"
      ]
     },
     "execution_count": 204,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "# 通过LogisticRegression类定义一个逻辑回归模型名字叫lr\n",
    "lr = LogisticRegression(solver='liblinear')\n",
    "\n",
    "# 对lr模型进行训练(fit)\n",
    "lr.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "id": "e1c0bdf8-a772-4aa1-82f4-2b1c760c3ea8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-0.49981725]\n",
      "[[-0.36115597 -0.31977792 -0.11199371 ...  0.09580148  0.08967486\n",
      "   0.10330067]]\n"
     ]
    }
   ],
   "source": [
    "# 查看模型结果\n",
    "print(lr.intercept_ )\n",
    "print(lr.coef_)\n",
    "\n",
    "# 把变量名称和系数对应在一起方便查看\n",
    "# pd.DataFrame(list(zip(np.transpose(lr.coef_), X_train.columns)), columns=['coef', 'columns'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "id": "91e999a6-03db-4a42-8e77-dd7e26be878c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LogisticRegression(C=10, penalty='l1', solver='liblinear')\n",
      "0.9538398692810457\n",
      "{'C': 10, 'penalty': 'l1'}\n"
     ]
    }
   ],
   "source": [
    "# grid search调参\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "parameters = {\n",
    "    'penalty': ('l1', 'l2'),\n",
    "    'C': (0.01, 0.1, 1, 10,11,12,13,14,15,20,100)\n",
    "}\n",
    "\n",
    "lr = LogisticRegression(solver='liblinear')\n",
    "lr_search = GridSearchCV(lr, parameters, scoring='accuracy', cv=9)\n",
    "lr_search.fit(X_train, y_train)\n",
    "\n",
    "#查看最佳结果\n",
    "print(lr_search.best_estimator_)\n",
    "print(lr_search.best_score_)\n",
    "print(lr_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 207,
   "id": "45a68a3a-a442-4be7-9e62-75f63d95df30",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-20 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-20 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-20 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-20 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-20 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-20 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-20 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-20 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-20 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-20 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-20 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-20 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-20 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-20 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-20 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-20 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-20 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-20 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-20 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-20 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-20 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-20 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-20 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-20 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-20 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-20 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-20\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression(C=12, penalty=&#x27;l1&#x27;, solver=&#x27;liblinear&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-20\" type=\"checkbox\" checked><label for=\"sk-estimator-id-20\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression(C=12, penalty=&#x27;l1&#x27;, solver=&#x27;liblinear&#x27;)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LogisticRegression(C=12, penalty='l1', solver='liblinear')"
      ]
     },
     "execution_count": 207,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 用最佳参数重新训练模型\n",
    "lr = LogisticRegression(C=12,penalty='l1',solver='liblinear')\n",
    "lr.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "id": "4918e6b7-2637-4150-b70a-877e66e4b901",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.96\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       1.00      0.91      0.95        23\n",
      "           1       0.93      1.00      0.96        27\n",
      "\n",
      "    accuracy                           0.96        50\n",
      "   macro avg       0.97      0.96      0.96        50\n",
      "weighted avg       0.96      0.96      0.96        50\n",
      "\n",
      "[[21  2]\n",
      " [ 0 27]]\n",
      "0.9887278582930757\n"
     ]
    },
    {
     "data": {
      "image/png": "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6tULe/fuxdq1a1UdidNMnz4dGzZswMyZM3H16lVcv34dW7ZswdSpUzW6tgYNGqB69eqYN28eAKB8+fI4f/48QkJCcOvWLUybNg3nzp1TO8bFxQX//vsvbt68iaioKLx9+xa9evVC8eLF0aFDBxw/fhz37t3D0aNHMXLkSDx69EijmIj0ktydfohI+zLqhJpm8eLFwsHBQZiZmQkvLy+xYcMGAUC8fPlSCKHe4TcpKUl0795dODs7C2NjY+Ho6CiGDx+u1ln4n3/+EV988YWwtLQUFhYWonr16uk6BL/vww7FH0pNTRUzZswQTk5OwsjISNSoUUPs379f9fqqVatEzZo1hYWFhbC2thYtWrQQoaGhqtfxXodiIYRYvXq1cHZ2FgYGBsLDwyPT+5OamiocHBwEAHH37t10cR04cEA0bNhQmJmZCWtra1GvXj2xatWqTK/Dz89P1KhRI135b7/9JkxMTMSDBw9EYmKi6Nevn7CxsRGFCxcW33zzjZg4caLacc+ePVPdXwDiyJEjQgghnj59Kvr27SuKFy8uTExMRNmyZcWgQYNETExMpjERFRQKIYSQN70iIiIi0h42SxEREZFeYXJDREREeoXJDREREekVJjdERESkV5jcEBERkV5hckNERER6hckNERER6RUmN0RERKRXmNwQERGRXmFyQ0RERHqFyQ0RERHpFSY3REREpFf+Dz8V1qoSQd+SAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.metrics import roc_curve\n",
    "from sklearn.metrics import auc\n",
    "print(lr.score(X_test,y_test))\n",
    "\n",
    "# 利用模型对测试集进行预测，输出target预测标签值和概率\n",
    "y_test_pred = lr.predict(X_test)\n",
    "y_test_prob = lr.predict_proba(X_test)\n",
    "# print(lr.score(X_test,y_test))\n",
    "\n",
    "# 分类评估汇总报告classification_report\n",
    "print(classification_report(y_test,y_test_pred))\n",
    "\n",
    "# 误分类矩阵 confusion_matrix\n",
    "print(confusion_matrix(y_test,y_test_pred))\n",
    "                       \n",
    "# ROC曲线\n",
    "fpr, tpr, thresholds =roc_curve(y_test, y_test_prob[:,1])\n",
    "\n",
    "# print AUC值\n",
    "auc = auc(fpr, tpr)\n",
    "print(auc)\n",
    "\n",
    "# plot ROC曲线\n",
    "plt.plot(fpr, tpr, lw=2, label='ROC curve (area = {:.2f})'.format(auc))\n",
    "plt.plot([0,1], [0, 1], 'r--')\n",
    "plt.xlabel('False Positive Rate')\n",
    "plt.ylabel('True Positive Rate')\n",
    "plt.title('Receiver operating characteristic example')\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 209,
   "id": "182a11ea-b6de-4626-ba80-eeeebda78b98",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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pnPZjaDdOLPRsiyCBgAoFbZecly9erXGjRun8uXLa8qUKerQoYMk6e9//7smTZqkqKgoSdL48eM1f/58tw0LAEBBbAVt9uzZcjgciouL0yuvvKIGDRpIkkaOHKnXXntNP/74o4YOHar58+erc+fObh0YAID82Arali1b1LJlS7Vr1y7f9X5+fnr77bdVvnx5vfTSS8UaEAAAV9gK2oULF1SvXj3nbR8fH0nSlStXnMv8/PzUuXNnLnsFACgVtoJWqVIlpaenO29XrFhRknTixIlc22VnZys5ObkY4wEA4BpbQYuMjFRCQoLzdpMmTWRZlpYtW+ZcdunSJW3YsEG1atUq/pQAANyCrdP2u3Tpotdff11nzpxRtWrV1KdPHwUGBur555/X6dOnFRkZqffff1/nz5/XwIED3T0zAAB52AragAEDtHPnTu3atUs9e/ZUpUqVNHPmTP3+97/XzJkzJV3/DFpUVJT++Mc/unVgAADyYytobdq00VdffZVr2ciRI9WqVSstXrxY58+fV6NGjTR8+HCFhoa6ZVAAAApTrEtf/VLLli3VsmVLd/5KAABcwsWJAQBGIGgAACPYesnR29vb5W0dDoeysrLsHAYAAJfZClp+XxPjjm0BALDL1kuOOTk5+f5kZ2fr6NGjeuONN1SxYkVNnTpVOTk57p4ZAIA83HqWo8PhUFRUlMaMGaMmTZqoe/fuatKkifr37+/OwwAAkEeJnRRy9913q0WLFs4PWgMAUJJK9CzHunXrau/evSV5CAAAJJVw0A4dOsRJIQCAUlEiQcvKytIrr7yiXbt2qUWLFiVxCAAAcrF1UkjXrl0LXJeWlqajR4/q4sWL8vLy0vPPP297OAAAXGUraGvXrr3lNg0aNNCMGTPUq1cvO4cAAKBIbAVtzZo1Ba7z9fVVzZo1FRkZaXsoAACKyvYXfAIAUJbYOilk0aJF2rhx4y2327x5sxYtWmTnEAAAFImtoA0bNkzvvffeLbebN2+ehg8fbucQAAAUSYl+Do3PoAEASkuJBu3nn39WQEBASR4CAABJRTgpZP369blunz59Os+yG7KysrRv3z59+eWXiomJKd6EAAC4wOWg3X333XI4HM7bcXFxiouLK3Qfy7I0evRo+9MBAOAil4N21113OYO2bt06Va1aVdHR0flu6+vrq1q1aql///6677773DMpAACF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",
      "text/plain": [
       "<Figure size 480x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#来一个更美观一些误分类矩阵\n",
    "def show_confusion_matrix(cnf_matrix, class_labels):\n",
    "    plt.matshow(cnf_matrix, cmap=plt.cm.YlGn, alpha=0.7)\n",
    "    ax = plt.gca()\n",
    "    ax.set_xlabel('Predicted Label', fontsize=16)\n",
    "    ax.set_xticks(range(0,len(class_labels)))\n",
    "    ax.set_xticklabels(class_labels,rotation=45)\n",
    "    ax.set_ylabel('Actual Label', fontsize=16, rotation=90)\n",
    "    ax.set_yticks(range(0,len(class_labels)))\n",
    "    ax.set_yticklabels(class_labels)\n",
    "    ax.xaxis.set_label_position('top')\n",
    "    ax.xaxis.tick_top()\n",
    "\n",
    "    for row in range(len(cnf_matrix)):\n",
    "        for col in range(len(cnf_matrix[row])):\n",
    "            ax.text(col, row, cnf_matrix[row][col], va='center', ha='center', fontsize=16)\n",
    "\n",
    "class_labels = [0,1]\n",
    "\n",
    "cnf_matrix = confusion_matrix(y_test, y_test_pred) \n",
    "show_confusion_matrix(cnf_matrix, class_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 210,
   "id": "4d375815-4446-4280-91e1-7415057c479f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Reading in LAMOST data...\n"
     ]
    }
   ],
   "source": [
    "\n",
    "print(\"Reading in LAMOST data...\")\n",
    "X_yanzheng = np.load('fluxval.npy')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 211,
   "id": "bb759e36-1fd1-4d42-9382-3f1e0a05e855",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.39491487, 0.72125906, 0.4210181 , ..., 0.67912   , 0.6787861 ,\n",
       "        0.6787861 ],\n",
       "       [0.3061585 , 0.3061585 , 0.37813032, ..., 0.38932303, 0.38932303,\n",
       "        0.38932303],\n",
       "       [0.13184777, 0.13184777, 0.13184777, ..., 0.14209156, 0.14209156,\n",
       "        0.13527568],\n",
       "       ...,\n",
       "       [0.31307313, 0.31307313, 0.31307313, ..., 0.4574273 , 0.4634054 ,\n",
       "        0.4634054 ],\n",
       "       [0.75073797, 0.75073797, 0.75073797, ..., 0.51213163, 0.51213163,\n",
       "        0.50928825],\n",
       "       [0.16124974, 0.16124974, 0.1882872 , ..., 0.47025025, 0.47025025,\n",
       "        0.47025025]], dtype=float32)"
      ]
     },
     "execution_count": 211,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_yanzheng"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 212,
   "id": "3c01fffa-3c10-4d7a-b016-416590cd9077",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_yanzheng_pred = lr.predict(X_yanzheng)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 213,
   "id": "df9d045c-a726-4be8-bffb-e0e4cc46ab7c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0,\n",
       "       0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0,\n",
       "       0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,\n",
       "       0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,\n",
       "       0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0])"
      ]
     },
     "execution_count": 213,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_yanzheng_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "id": "f9c61a5d-cf7c-4248-8c5f-b9dd21497592",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['A' 'B' 'B' 'B' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'A' 'A' 'A'\n",
      " 'B' 'A' 'A' 'A' 'A' 'A' 'B' 'B' 'B' 'A' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'A'\n",
      " 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'B' 'A' 'A'\n",
      " 'A' 'A' 'A' 'A' 'A' 'B' 'B' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A'\n",
      " 'A' 'A' 'A' 'A' 'A' 'B' 'B' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A'\n",
      " 'A' 'A' 'A' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'B' 'A' 'A' 'A'\n",
      " 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A'\n",
      " 'A' 'B' 'A' 'B' 'B' 'A' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A'\n",
      " 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'A' 'B' 'B'\n",
      " 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'A' 'B'\n",
      " 'A' 'A' 'B' 'B' 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'B' 'A' 'A' 'A' 'A' 'A' 'A'\n",
      " 'A' 'A']\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "# # 假设这是你的原始NumPy数组Y\n",
    "# Y = np.array([0, 1, 0, 1, 1, 0, 0, 1])  # 这只是一个例子，请用你自己的数据替代\n",
    "\n",
    "# 使用NumPy的where函数进行替换\n",
    "Y_converted = np.where(y_yanzheng_pred == 0, 'A', 'B')\n",
    "\n",
    "print(Y_converted)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 215,
   "id": "53ff58b0-53a5-4c3d-95e4-61475c4cbb58",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_yanzheng_true000 = np.load('sclsval.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 216,
   "id": "a0e183b5-7ec6-4f23-9e5e-36881356593d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['B', 'B', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'A', 'A', 'A', 'A',\n",
       "       'B', 'A', 'B', 'B', 'A', 'B', 'B', 'B', 'A', 'A', 'B', 'A', 'B',\n",
       "       'B', 'A', 'A', 'B', 'A', 'B', 'B', 'A', 'B', 'A', 'A', 'A', 'B',\n",
       "       'A', 'B', 'B', 'A', 'A', 'A', 'B', 'B', 'B', 'A', 'B', 'A', 'B',\n",
       "       'A', 'B', 'A', 'A', 'B', 'A', 'A', 'B', 'B', 'A', 'B', 'A', 'B',\n",
       "       'A', 'A', 'B', 'A', 'A', 'A', 'A', 'A', 'B', 'A', 'A', 'B', 'B',\n",
       "       'B', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'A', 'B', 'B', 'A',\n",
       "       'A', 'B', 'A', 'A', 'A', 'B', 'B', 'B', 'A', 'A', 'B', 'B', 'B',\n",
       "       'B', 'A', 'A', 'B', 'B', 'A', 'B', 'B', 'A', 'A', 'B', 'A', 'A',\n",
       "       'A', 'A', 'A', 'B', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'A', 'A',\n",
       "       'B', 'A', 'B', 'B', 'B', 'A', 'A', 'B', 'A', 'A', 'A', 'B', 'B',\n",
       "       'A', 'B', 'A', 'B', 'B', 'A', 'A', 'B', 'B', 'A', 'B', 'A', 'B',\n",
       "       'B', 'A', 'A', 'A', 'B', 'B', 'B', 'A', 'A', 'B', 'A', 'A', 'B',\n",
       "       'A', 'B', 'A', 'A', 'B', 'B', 'B', 'B', 'A', 'B', 'A', 'B', 'B',\n",
       "       'B', 'B', 'B', 'A', 'B', 'A', 'B', 'B', 'A', 'B', 'B', 'B', 'B',\n",
       "       'B', 'B', 'B', 'A', 'B'], dtype='<U1')"
      ]
     },
     "execution_count": 216,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_yanzheng_true000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 217,
   "id": "49972096-4825-42ed-8ed9-91f936a69579",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "正确答案的数量是: 118\n",
      "准确率为: 59.00%\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "# 假设你已经有两个NumPy数组 Y_converted 和 y_yanzheng_true000\n",
    "\n",
    "# 步骤 2: 比较数组\n",
    "comparison = Y_converted == y_yanzheng_true000\n",
    "\n",
    "# 步骤 3: 计算相等元素的数量\n",
    "num_correct = np.sum(comparison)\n",
    "\n",
    "print(f\"正确答案的数量是: {num_correct}\")\n",
    "# 计算总元素数量\n",
    "total_elements = len(Y_converted)\n",
    "\n",
    "# 计算准确率\n",
    "accuracy = num_correct / total_elements\n",
    "\n",
    "print(f\"准确率为: {accuracy:.2%}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "eee6bbc7-8066-4ecf-a470-ca79494c82db",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "54dd4cbe-9753-4e37-a3cb-ea5e435f8efe",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "378cc9a4-8497-438f-8897-03910f0ecdc2",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
